package com.back.util;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;

public class POIUtil {
    /**
     * 获取cell中的值并返回String类型
     *
     * @param cell
     * @return String类型的cell值
     */
    public static String getCellValue(Cell cell) {
        String cellValue = null;
        CellType cellType = cell.getCellType();// CellType.forInt(cell.getCellType());
        if (cellType == CellType.STRING) {
            cellValue = cell.getStringCellValue();
        } else if (cellType == CellType.NUMERIC) {
            if (HSSFDateUtil.isCellDateFormatted(cell)) {// 判断是否为日期类型
                Date date = cell.getDateCellValue();
//                      DateFormat formater = new SimpleDateFormat("yyyy/MM/dd HH:mm");
                DateFormat formater = new SimpleDateFormat("yyyy/MM/dd");
                cellValue = formater.format(date);
            } else {
                // 有些数字过大，直接输出使用的是科学计数法： 2.67458622E8 要进行处理
                DecimalFormat df = new DecimalFormat("####.####");
                cellValue = df.format(cell.getNumericCellValue());
                // cellValue = cell.getNumericCellValue() + "";
            }
        } else if (cellType == CellType.BOOLEAN) {
            cellValue = cell.getBooleanCellValue()+"";
        } else if (cellType == CellType.FORMULA) {
            try {
                // 如果公式结果为字符串
                cellValue = String.valueOf(cell.getStringCellValue());
            } catch (IllegalStateException e) {
                if (HSSFDateUtil.isCellDateFormatted(cell)) {// 判断是否为日期类型
                    Date date = cell.getDateCellValue();
//                      DateFormat formater = new SimpleDateFormat("yyyy/MM/dd HH:mm");
                    DateFormat formater = new SimpleDateFormat("yyyy/MM/dd");
                    cellValue = formater.format(date);
                } else {
                    FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper()
                            .createFormulaEvaluator();
                    evaluator.evaluateFormulaCell(cell);
                    // 有些数字过大，直接输出使用的是科学计数法： 2.67458622E8 要进行处理
                    DecimalFormat df = new DecimalFormat("####.####");
                    cellValue = df.format(cell.getNumericCellValue());
//                          cellValue = cell.getNumericCellValue() + "";
                }
            }
//              //直接获取公式
//              cellValue = cell.getCellFormula() + "";
        } else if (cellType == CellType.BLANK) {
            cellValue = "";
        } else {
            cellValue = "未知类型";
        }

        return cellValue;
    }
}